package br.com.bancodecurriculos.util.criptografia;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import Decoder.BASE64Encoder;

public abstract class CriptografiaGenerica {

	// funcoes hash que geram codigo de tamanho fixo
	private MessageDigest messageDigest;

	// transforma uma String em um array de bytes criptografados
	private BASE64Encoder base64Encoder;

	private void setAlgoritmo(String algoritmo) throws NoSuchAlgorithmException {
		if (messageDigest == null || messageDigest.getAlgorithm() != algoritmo) {
			messageDigest = MessageDigest.getInstance(algoritmo);
		}
		if (base64Encoder == null) {
			base64Encoder = new BASE64Encoder();
		}
	}

	protected String criptografarPorAlgoritmo(String algoritmo, String valor)
			throws NoSuchAlgorithmException {
		if (valor == null) {
			throw new IllegalArgumentException("Valor null");
		}
		this.setAlgoritmo(algoritmo);
		byte[] hash = messageDigest.digest(valor.getBytes());
		return base64Encoder.encode(hash);
	}

}
